package com.nio;

import java.nio.IntBuffer;

/**
 * @Author 咕唧
 * @Date 2022/7/5 19:38
 * @Version 1.0
 * nio切割操作
 */
public class Nio04 {
    public static void main(String[] args) {
        //相当于申请多大的内存空间， 可以理解为申请同等长度的数组
        IntBuffer intBuffer = IntBuffer.allocate(20);

        for (int i = 0; i < 10; i++) {
            //将数组保存在一个位置,put方法写完一个数数字之后会自动往后移动
            intBuffer.put(i);
        }

        //手动设置position,limit
        intBuffer.position(3);
        intBuffer.limit(9);
        //以当前position和limit的位置，切割出一个新的空间，包含position的数据,但是不包含limit,
        //因为limit这个位置数据的是不可以读或者写的,其实返回的是一个共享数据的buffer,只是新的buffer有自己独立的position,limit,mark
        IntBuffer slice = intBuffer.slice();
        //修改新空间中的数据
        for (int i = 0; i < slice.capacity(); i++) {
            //第一个参数，元素位置，第二个参数，存放的数据
            slice.put(i,slice.get() * 2);
        }

        //按照说法,slice方法会返回一个新的buffer,是吗?想确认是不是,我们可以修改新的buffer的数据,看看老的变不变,实际上内容也会变化
        //恢复原始buffer的位置
        intBuffer.position(0);
        intBuffer.limit(intBuffer.capacity());
        while (intBuffer.hasRemaining()) {
            int i = intBuffer.get();
            System.err.println("当前的数据是：" + i);
        }
    }
}
